#!/usr/bin/env python
# -*- coding: UTF-8 -*-

"""
Librairie du serveur HTTP de WebAdminToolkit

Classes copiées du fichier BaseHTTPserveur.py des librairies de python 2.6
Ce fichier est vidé de la documentation original
Pour toutes information se reporter au fichier original.

Date 01 janv 2009
"""

__version__ = "0.3"

__all__ = ["HTTPDaemon", "HTTPReqHandler"]

import sys
import time
import socket # For gethostbyaddr()
import SocketServer
import threading
import mimetools
from warnings import filterwarnings, catch_warnings



#Classe de sécu contre le cross site scripting
#ecrit dans le module original et gardé car c'est une tres bonne chose
def _quote_html(html):
    return html.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")



class HTTPDaemon(SocketServer.ThreadingTCPServer):

    allow_reuse_address = 1    # Seems to make sense in testing environment

    def server_bind(self):
        
        """Override server_bind to store the server name."""
        SocketServer.ThreadingTCPServer(self) # Map l'objet courant sur une socket tcp 
        
        host, port = self.socket.getsockname()[:2]
        #parametres qui doivent etre personnalisable
        self.server_name = socket.getfqdn(host)
        self.server_port = port



class HTTPReqHandler(SocketServer.StreamRequestHandler):

    sys_version = "Python/" + sys.version.split()[0]
    server_version = "BaseHTTP/" + __version__
    # The default request version. 
    default_request_version = "HTTP/0.9"

    def handle_one_request(self):
        
        
        
        print 'affichage du header de la requette'
        print ' '
        
        print '----------------------- Debut connexion -----------------------'
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()        
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        print self.rfile.readline()
        
        #self.wfile.write('salut gonzo !')
        
        print '----------------------- Fin connexion -----------------------'
        
       
        


    def handle(self):
        """La methode automatiquement appellé lors d'une requette client c'est celle ci !"""
        self.close_connection = 1
        
        print ' '
        print 'Requette client détecté'
        
        #time.sleep(200)
        
        self.handle_one_request()
        
        """
        pourquoi ce with ?
        je ne sais pas, 
        mais si je capte pas je suppr pas pour l'instant
        """
        while not self.close_connection:
            self.handle_one_request()
            
        
        


def test():
    
    """
    La fonction de test du module
    par H
    """
    host = 'localhost'
    
    #port = int(raw_input('Port du serveur : '))
    port = 80 #marre de le saisir a chaque execution...^^
    
    #Lancement du démon http et ouverture de la socket
    server_address = (host, port)
    HTTPReqHandler.protocol_version = "HTTP/1.0"
    httpd = HTTPDaemon(server_address, HTTPReqHandler)
    
    srv = httpd.socket.getsockname()
    print '-' * 40
    print "Démarage de l'écoute du serveur HTTP \nIP : ", srv[0], "\nPort : ", srv[1]
    print '-' * 40
    
    httpd.serve_forever()



if __name__ == '__main__':
    test()



